package cn.beaustry.module.crm.controller.admin.customer.vo.customer;

import cn.beaustry.framework.common.validation.InEnum;
import cn.beaustry.framework.excel.core.annotations.DictFormat;
import cn.beaustry.framework.excel.core.convert.DictConvert;
import cn.beaustry.module.crm.enums.common.CrmSceneTypeEnum;
import cn.beaustry.module.infra.enums.DictTypeConstants;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;

import java.time.LocalDateTime;

@Schema(description = "管理后台 - CRM 客户 Response VO")
@Data
@ExcelIgnoreUnannotated
public class CrmCustomerRespVO {

    @Schema(description = "客户名称", example = "赵六")
    private String name;

    @Schema(description = "手机", example = "18000000000")
    private String mobile;

    @Schema(description = "所属行业", example = "1")
    private Integer industryId;

    @Schema(description = "客户等级", example = "1")
    private Integer level;

    @Schema(description = "客户来源", example = "1")
    private Integer source;

    @Schema(description = "场景类型", example = "1")
    @InEnum(CrmSceneTypeEnum.class)
    private Integer sceneType; // 场景类型，为 null 时则表示全部

    @Schema(description = "联系状态", example = "1")
    private Integer contactStatus; // backlog 查询条件

    @Schema(description = "跟进状态", example = "true")
    private Boolean followUpStatus;

    @Schema(description = "编号", example = "1")
    private Long id;

    @Schema(description = "顾客类型", example = "1")
    private Long customerType;

    @Schema(description = "顾客编号", example = "CUST001")
    private String code;

    @Schema(description = "性别", example = "female")
    private String sex;

    @Schema(description = "星座", example = "Leo")
    private String constellation;

    @Schema(description = "阴历生日", example = "2025-01-01T12:00:00")
    private LocalDateTime lunarBirthday;

    @Schema(description = "阳历生日", example = "2025-01-01T12:00:00")
    private LocalDateTime birthday;

    @Schema(description = "年龄", example = "30")
    private Integer age;

    @Schema(description = "消费级别", example = "High")
    private String consumptionLevel;

    @Schema(description = "学历", example = "Bachelor")
    private String educationLevel;

    @Schema(description = "职业", example = "Engineer")
    private String occupation;

    @Schema(description = "工作单位", example = "Moonshot AI")
    private String workplace;

    @Schema(description = "籍贯", example = "Beijing")
    private String placeOfOrigin;

    @Schema(description = "居住地址", example = "No. 10 Downing Street")
    private String residentialAddress;

    @Schema(description = "婚姻状况", example = "Married")
    private String maritalStatus;

    @Schema(description = "收入情况", example = "Stable")
    private String incomeSituation;

    @Schema(description = "年收入", example = "100000")
    private String annualIncome;

    @Schema(description = "常用车辆品牌", example = "Tesla")
    private String preferredVehicleBrand;

    @Schema(description = "负责人的用户编号", example = "1001")
    private Long ownerUserId;

    @Schema(description = "成为负责人的时间", example = "2025-01-01T12:00:00")
    private LocalDateTime ownerTime;

    @Schema(description = "所属门店", example = "101")
    private Long ownerDeptId;

    @Schema(description = "锁定状态", example = "true")
    private Boolean lockStatus;

    @Schema(description = "成交状态", example = "true")
    private Boolean dealStatus;

    @Schema(description = "最后跟进时间", example = "2025-01-01T12:00:00")
    private LocalDateTime contactLastTime;

    @Schema(description = "最后跟进内容", example = "Customer is interested in new products.")
    private String contactLastContent;

    @Schema(description = "下次联系时间", example = "2025-01-01T12:00:00")
    private LocalDateTime contactNextTime;

    @Schema(description = "电话", example = "1234567890")
    private String telephone;

    @Schema(description = "QQ", example = "123456789")
    private String qq;

    @Schema(description = "微信", example = "wechat123")
    private String wechat;

    @Schema(description = "邮箱", example = "example@example.com")
    private String email;

    @Schema(description = "地区编号", example = "10001")
    private Long areaId;

    @Schema(description = "备注", example = "Customer is very active.")
    private String remark;

    @Schema(description = "租户编号", example = "1")
    private Long tenantId;

    @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("创建时间")
    private LocalDateTime createTime;

    @Schema(description = "更新时间", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("更新时间")
    private LocalDateTime updateTime;

    @Schema(description = "创建人", example = "1024")
    @ExcelProperty("创建人")
    private String creator;

    @Schema(description = "创建人名字", example = "芋道源码")
    @ExcelProperty("创建人名字")
    private String creatorName;

    @Schema(description = "所属部门", example = "101")
    private Long deptId;

    @Schema(description = "所属部门名称", example = "Beauty Department")
    private String deptName;

    @Schema(description = "顾问编号", example = "2001")
    private Long consultantUserId;

    @Schema(description = "顾问名称", example = "John Doe")
    private String consultantName;

    @Schema(description = "养疗师编号", example = "3001")
    private Long healerUserId;

    @Schema(description = "养疗师名称", example = "Jane Smith")
    private String healerName;

}
